如何用bvp4c Matlab求解两个方程? | 您所在的位置:网站首页 › matlab bvp4c函数 › 如何用bvp4c Matlab求解两个方程? |
我需要解两个微分方程,每个方程都有两个边界条件。正因为如此,我选择了Matlab方法bvp4c来解决这个问题: p1' = -32 * beta * m1 / (R ^ 4 * p1) p2' = - ( - 8 * p1' / R - p1' * p2 - 32 * beta * m2 / R ^ 4 ) / p1 我有函数文件bvpfcn.m,我在其中定义了两个微分方程: 代码语言:javascript复制function dpdz = bvpfcn(z,p) beta = 1; m1 = 1; m2 = 0.1; ri = 0.7; z = linspace(0,1,1001); R = ri - z .* (ri - 1); dpdz = zeros(2,1001); dpdz = [- 32 .* beta .* m0 ./ (R .^ 4 .* p(1)); -( - 8 .* dpdz(1) ./ R - dpdz(1) .* p(2) - 32 .* beta .* m1 ./ R .^ 4 ) ./ p(1); ]; end然后在函数文件bcfcn.m中定义了边界条件。我的边界条件是: p(1)|(z=0) = 8 p(1)|(z=1) = 1 p(2)|(z=0) = 0 p(2)|(z=1) = 0 文件bcfcn.m为: 代码语言:javascript复制function res = bcfcn(pa,pb) res = [pa(1)-8; pa(2); pb(1)-1; pb(2)]; end我的解决方案需要是这样的:shape of expected solution 由于这个形状,我做了余弦型的猜测函数: 代码语言:javascript复制function g = guess(z) g = [0.65.*cos(z) 0.65.*cos(z)]; end当我使用以下命令执行所有操作时: 代码语言:javascript复制beta = 1; m1 = 1; m2 = 0.1; ri = 0.7; xmesh = linspace(0,1,1001); solinit = bvpinit(xmesh, @guess); sol = bvp4c(@bvpfcn, @bcfcn, solinit);我收到错误: 代码语言:javascript复制Error using bvparguments (line 111) Error in calling BVP4C(ODEFUN,BCFUN,SOLINIT): The boundary condition function BCFUN should return a column vector of length 2. Error in bvp4c (line 130) bvparguments(solver_name,ode,bc,solinit,options,varargin);当我有4个边界条件时,如何生成列向量?我的假设正确吗? |
CopyRight 2018-2019 实验室设备网 版权所有 |